home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: MegaDisc / MegaDisc 27 (1992-03)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).zip / MegaDisc 27 (1992-03)(MegaDisc Digital Publishing)(AU)(Disk 2 of 2).adf / Programming / DataMaker / DM1.bas < prev    next >
BASIC Source File  |  1992-03-30  |  5KB  |  169 lines

  1. REM ************************************
  2. REM *    DATAMAKER   for the Amiga     *
  3. REM *  by    D.M. Balean,  March 1988  *
  4. REM ************************************ 
  5.  
  6. REM ******** This section obtains the program parameters ********
  7.  
  8. PRINT "DATAMAKER" : PRINT 
  9. INPUT "Filename of code                       >" , Codename$
  10. INPUT "Filename for DATA statements           >" , dataname$
  11.  
  12. Items:
  13. INPUT "Number of items(16 bit words) per line >" , item$ 
  14. item% = VAL(item$)
  15. IF item% > 32 THEN PRINT  "ERROR - Maximum is 32 Items" : GOTO Items
  16.  
  17. INPUT "Hex or Decimal data?               H/D >" , a$ 
  18. IF (UCASE$(a$) = "H") THEN
  19.     HFlag = 1
  20. ELSE
  21.     HFlag = 0
  22. END IF
  23.  
  24. ln = 0              : 'initialize count of number of lines
  25. n = 0               : 'initialize count of number of words in code file
  26.  
  27. OPEN Codename$ FOR INPUT AS #1
  28. OPEN dataname$ FOR OUTPUT AS #2
  29.  
  30. PRINT  : PRINT  "Writing DATA line" ;
  31. xp = POS(0)         : 'remember cusor position on this line
  32.  
  33. REM ******** This section writes the generator ********
  34.  
  35. dataline$ = "REM - DATA STATEMENTS GENERATED FROM "  + Codename$
  36. GOSUB Printline
  37. GOSUB Printempty
  38. dataline$ = "PRINT " + CHR$(34) +"FILE GENERATOR" + CHR$(34)
  39. GOSUB Printline
  40. dataline$ = "RESTORE Info : READ item%,n : RESTORE"
  41. GOSUB Printline
  42. dataline$ = "ln = 1      : ' Line number"
  43. GOSUB Printline
  44. dataline$ = "PRINT : PRINT " + CHR$(34) + "Original filename was >"
  45. dataline$ = dataline$ + Codename$ + CHR$(34) + " : PRINT"
  46. GOSUB Printline
  47. dataline$ = "INPUT " + CHR$(34) + "Filename for output   >" + CHR$(34) 
  48. dataline$ = dataline$ + " , codename$"
  49. GOSUB Printline
  50. dataline$ = "OPEN codename$ FOR OUTPUT AS #1"
  51. GOSUB Printline
  52. dataline$ = "PRINT : PRINT : PRINT " + CHR$(34) + "Processing DATA line"
  53. dataline$ = dataline$ + CHR$(34) + " ; "
  54. GOSUB Printline
  55. dataline$ = "xp = POS(0)         : 'remember cursor position on this line"
  56. GOSUB Printline
  57. dataline$ = "FOR number = 1 to n"
  58. GOSUB Printline
  59. dataline$ = "GOSUB Readindata"
  60. GOSUB Printline
  61. dataline$ = "IF i% = item% THEN GOSUB Check"
  62. GOSUB Printline
  63. dataline$ = "IF (ln = INT(n/item%) + 1) AND (number < n) THEN"
  64. GOSUB Printline
  65. dataline$ = "  FOR last = number + 1 TO n"
  66. GOSUB Printline
  67. dataline$ = "  GOSUB Readindata"
  68. GOSUB Printline
  69. dataline$ = "  NEXT last: GOSUB Check : number = n"
  70. GOSUB Printline
  71. dataline$ = "END IF"
  72. GOSUB Printline
  73. dataline$ = "NEXT number : CLOSE"
  74. GOSUB Printline
  75. dataline$ = "PRINT : PRINT " + CHR$(34) + "<<< ALL DONE! >>>"
  76. dataline$ = dataline$ + CHR$(34) + " : END"
  77. GOSUB Printline
  78. GOSUB Printempty
  79.  
  80. dataline$ = "Readindata:"
  81. GOSUB Printline
  82. dataline$ = "READ word :if word < 0 then word = word + 65536"
  83. GOSUB Printline
  84. dataline$ = "t = t + word : i% = i% + 1"
  85. GOSUB Printline
  86. dataline$ = "hb% = int(word/256) : lb% = word - hb% * 256"
  87. GOSUB Printline
  88. dataline$ = "PRINT #1, CHR$(hb%) ; CHR$(lb%) ;"
  89. GOSUB Printline
  90. dataline$ = "RETURN"
  91. GOSUB Printline
  92. GOSUB Printempty
  93. dataline$ = "Check:"
  94. GOSUB Printline
  95. dataline$ = "LOCATE CSRLIN,xp : PRINT  ln ;"
  96. GOSUB Printline
  97. dataline$ = "READ ch : IF t = ch THEN ln = ln + 1 : t = 0 : i% = 0 : RETURN"
  98. GOSUB Printline
  99. dataline$ ="BEEP : PRINT"
  100. GOSUB Printline
  101. dataline$ = "PRINT "+ CHR$(34)
  102. dataline$ = dataline$ + "<<< CHECKSUM ERROR IN LINE" + CHR$(34)
  103. dataline$ = dataline$ + " ; ln ; " +CHR$(34) 
  104. dataline$ = dataline$ + " of the DATA statements >>>" + CHR$(34)
  105. GOSUB Printline
  106. dataline$ = "CLOSE : KILL Codename$ : END"  
  107. GOSUB Printline
  108.  
  109. REM ******** This section writes the data statements ********
  110.  
  111. Newline:
  112. IF ln/10 = INT(ln/10) THEN GOSUB PrintREMnumber
  113. ln = ln + 1
  114. i% = 0              : 'item number on current line
  115. ch = 0              : 'line checksum
  116. dataline$ = "DATA "
  117.  
  118. Nextdata:
  119. IF EOF(1) THEN DONE
  120. word& = 256& * ASC(INPUT$(1,1))
  121.  
  122. IF EOF(1) THEN GOSUB Additem : GOTO DONE  : ' zero byte added if odd total
  123. word& = word& + ASC(INPUT$(1,1)) 
  124. GOSUB Additem
  125. IF i% < item% THEN Nextdata
  126. dataline$ = dataline$ + "," + RIGHT$("       " + STR$(ch),7) 
  127. GOSUB Printline : GOTO Newline
  128.  
  129. DONE: 
  130. IF i% THEN dataline$ = dataline$ + "," + RIGHT$("       " + STR$(ch),7)
  131. GOSUB Printline
  132. GOSUB Printempty
  133. dataline$ = "Info:"
  134. GOSUB Printline
  135. dataline$ = "DATA " + STR$(item%) + "," + STR$(n) 
  136. dataline$ = dataline$ + "    : ' number of items /line, /total"
  137. GOSUB Printline
  138.  
  139. CLOSE
  140. PRINT  : PRINT  "<<< Done! >>>"
  141. END
  142.  
  143. Additem:
  144. IF HFlag THEN
  145.     word$ = "&H" + RIGHT$("0000" + HEX$(word&), 4)
  146. ELSE
  147.     word$ = RIGHT$("     " + STR$(word&),5)
  148. END IF
  149.  
  150. ch = ch + word&
  151. IF i% THEN dataline$ = dataline$ + ","
  152. n = n + 1 : i% = i% + 1
  153. dataline$ = dataline$ + word$
  154. RETURN
  155.  
  156. PrintREMnumber:
  157. GOSUB Printempty
  158. dataline$ = "REM <<< Line Number" + STR$(ln + 1) + " >>>"
  159. GOSUB Printline : RETURN
  160.  
  161. Printempty:
  162. dataline$ = ""
  163.  
  164. Printline:
  165. IF ln THEN LOCATE CSRLIN,xp : PRINT  ln ;
  166. PRINT #2, dataline$
  167. RETURN
  168.  
  169.